package com.zfk.framework.listener;

import com.zfk.framework.config.ConfigLoader;
import com.zfk.framework.models.config.Config;
import com.zfk.framework.notification.DingTalkNotifier;

import com.zfk.framework.utils.ReportGenerator;
import com.zfk.framework.variable_handling.GlobalVariablePool;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.testng.ISuite;
import org.testng.ISuiteListener;
import com.zfk.framework.testcasepool.TestCaseInitializer;

import java.util.HashMap;


/**
 * TestNG监听器：在测试套件开始时初始化，在完成后发送测试结果通知
 */
public class TestResultListener implements ISuiteListener {
    private static final Logger logger = LogManager.getLogger(TestResultListener.class);

    /**
     * 在测试套件开始时，触发测试初始化
     *
     * @param suite 测试套件
     */
    @Override
    public void onStart(ISuite suite) {
        logger.info("Test suite started: {}", suite.getName());
        //触发配置初始化，初始化全局配置
        Config config = ConfigLoader.loadConfig("src/main/resources/config.yaml");//局部变量，方法执行后会销毁
        //后续通过 ConfigLoader.getConfig() 获取全局配置

        //触发全局变量初始化：初始化一个空的变量池
        GlobalVariablePool.initialize(new HashMap<>());

        // 触发测试初始化（加载用例到用例池）
        TestCaseInitializer.initialize();


    }

    /**
     * 在测试套件结束时，生成测试报告
     *
     * @param suite 测试套件
     */
    @Override
    public void onFinish(ISuite suite) {
        logger.info("测试套件 {} 执行完成，正在生成测试报告...", suite.getName());
        // TestNG会自动生成报告，这里可以添加额外的报告处理逻辑
        // 比如发送邮件通知、上传报告到服务器等
        
        // 使用ReportGenerator工具类生成测试报告
        String reportUrl =ReportGenerator.generateAllureReport();
        logger.info("测试报告已生成，报告地址：{}", reportUrl);
        //发送钉钉消息通知
        DingTalkNotifier.sendTestReportNotification(reportUrl);
        //发送微信消息通知
//        WeChatNotifier.sendTestReportNotification(reportUrl);

    }
}